package com.blog.controller;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @RestController 用于告诉spring此类用于处理客户端的请求
 */
@RestController
public class UploadController {

    private String uploadDir="D:/file";
    /**
     * 定义处理文件上传业务的方法，这个方法上可以基于
     * PostMapping注解定义，哪些类型(post)以及url(http://ip:port/upload)对应的请求可以交给这个方法处理
     * @param picFile 这个名为要与客户端上传文件时对应的表单属性名相同，其类型必须为MultipartFile
     * @return 这个返回值可以为上传成功以后新的文件名。
     */
    @PostMapping("/upload")
    public String upload(MultipartFile picFile) throws IOException {
        //1.修改文件名(只改前缀，不改后缀)
        //1.1获取原有文件名
        String ofName = picFile.getOriginalFilename();
        //1.2获取原有文件名的后缀(假如文件名是aaaa.png,这里就是要获取.png)
        String fileSuffix = ofName.substring(ofName.lastIndexOf("."));
        //1.3构建新的文件名
        String newFileName= UUID.randomUUID()+fileSuffix;
        //2.完成文件上传
        File uploadDirFile=new File(uploadDir);
        if(!uploadDirFile.exists()){
            uploadDirFile.mkdirs();
        }
        picFile.transferTo(new File(uploadDir,newFileName));
        System.out.println("newFileName="+newFileName);
        //3.返回文件存储地址
        return "/"+newFileName;
    }

    /**
     * @DeleteMapping描述方法时，表示这个方法可以处理Delete请求
     * @param name
     */
    @DeleteMapping("/remove")
    public String remove(String name){
        //构建文件对象
        File file=new File(uploadDir+name);
        //假如文件存在则删除文件
        if(file.exists()){
            file.delete();
            return "file delete ok";
        }
        return "file not exist";
    }

}
